/**
 * 通用表单验证工具函数
 */

/**
 * 校验密码复杂度
 * 要求：
 * 1. 长度至少8位
 * 2. 包含至少一个数字
 * 3. 包含至少一个小写字母
 * 4. 包含至少一个大写字母
 * 5. 包含至少一个特殊字符
 */
export function validatePasswordComplexity(rule, value, callback) {
  if (value === '') {
    callback(new Error('请输入密码'))
    return
  }
  
  // 检查密码长度
  if (value.length < 8) {
    callback(new Error('密码长度至少为8个字符'))
    return
  }
  
  // 检查是否包含数字
  if (!/\d/.test(value)) {
    callback(new Error('密码必须包含至少一个数字'))
    return
  }
  
  // 检查是否包含小写字母
  if (!/[a-z]/.test(value)) {
    callback(new Error('密码必须包含至少一个小写字母'))
    return
  }
  
  // 检查是否包含大写字母
  if (!/[A-Z]/.test(value)) {
    callback(new Error('密码必须包含至少一个大写字母'))
    return
  }
  
  // 检查是否包含特殊字符
  if (!/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(value)) {
    callback(new Error('密码必须包含至少一个特殊字符'))
    return
  }
  
  callback()
}

/**
 * 评估密码强度（返回0-4的强度值）
 * 0 - 空密码
 * 1 - 长度达标
 * 2 - 包含数字
 * 3 - 包含大小写字母
 * 4 - 包含特殊字符
 */
export function checkPasswordStrength(password) {
  if (!password) return 0
  
  let strength = 0
  
  // 检查长度
  if (password.length >= 8) strength++
  
  // 检查是否包含数字
  if (/\d/.test(password)) strength++
  
  // 检查是否包含小写和大写字母
  if (/[a-z]/.test(password) && /[A-Z]/.test(password)) strength++
  
  // 检查是否包含特殊字符
  if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) strength++
  
  return strength
}

/**
 * 根据强度值获取强度描述
 */
export function getPasswordStrengthText(strength) {
  switch (strength) {
    case 0: return '无'
    case 1: return '弱'
    case 2: return '中'
    case 3: return '强'
    case 4: return '极强'
    default: return '无'
  }
}

/**
 * 根据强度值获取CSS类名
 */
export function getPasswordStrengthClass(strength) {
  switch (strength) {
    case 0: return ''
    case 1: return 'strength-weak'
    case 2: return 'strength-medium'
    case 3: return 'strength-strong'
    case 4: return 'strength-very-strong'
    default: return ''
  }
} 